package com.agan.report.controller;

import com.agan.report.util.DateUtils;
import com.agan.report.util.WordUtils;
import sun.misc.BASE64Encoder;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.agan.report.util.WordUtils.createDocx;

/**
 * @ClassName TestDemo
 * @Description
 * @Auther agan
 * @Date 2020/8/19 4:44 下午
 **/
public class TestDemo {

    private final static String separator = File.separator;
    private final static String suffix_docx = "docx";
    private final static String suffix_doc = "doc";

    public static void main(String[] args) {
        URL basePath = WordUtils.class.getClassLoader().getResource("");
//        System.out.println("basePath.getPath() ==> " + basePath.getPath());
        String picPath = basePath.getPath() + separator + "templates" + separator + "test" + separator;
        ;
        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("ymdhis", DateUtils.getCurrentTime_yyyyMMddHHmmss());
        List<String> listTile = new ArrayList<>();
        listTile.add("这是第一个标题");
        listTile.add("这是第二个标题");
        listTile.add("这是第三个标题");
        dataMap.put("listTitle", listTile);

        List<String> picTypes = new ArrayList<>();
        picTypes.add("jpg");
        dataMap.put("picTypes", picTypes);

        List<Map<String, String>> picList = new ArrayList<>();

        Map<String, String> picMap = new HashMap<>();
        // 要按顺序，  改为base64
        //picMap.put("path", picPath + "pic1.jpg");
        picMap.put("path", convertFileToBase64(picPath + "pic1.jpg"));
        picMap.put("name", "pic1.jpg");
        picList.add(picMap);

        picMap = new HashMap<>();
        //picMap.put("path", picPath + "pic2.jpg");
        picMap.put("path", convertFileToBase64(picPath + "pic2.jpg"));
        picMap.put("name", "pic2.jpg");
        picList.add(picMap);

        picMap = new HashMap<>();
        //picMap.put("path", picPath + "pic3.jpg");
        picMap.put("path", convertFileToBase64(picPath + "pic3.jpg"));
        picMap.put("name", "pic3.jpg");
        picList.add(picMap);

        picMap = new HashMap<>();
        //picMap.put("path", picPath + "timg22.jpeg");
        picMap.put("path", convertFileToBase64(picPath + "timg22.jpeg"));
        picMap.put("name", "timg22.jpeg");
        picList.add(picMap);
        dataMap.put("picList", picList);
        List<Map<String, Object>> listTaleData = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("name", "小明");
        map.put("age", "11");
        map.put("sex", "男");
        map.put("grade", "五年级");
        listTaleData.add(map);

        map = new HashMap<>();
        map.put("name", "小红");
        map.put("age", "12");
        map.put("sex", "女");
        map.put("grade", "六年级");
        listTaleData.add(map);

        map = new HashMap<>();
        map.put("name", "小花");
        map.put("age", "13");
        map.put("sex", "女");
        map.put("grade", "七年级");
        listTaleData.add(map);
        dataMap.put("listTaleData", listTaleData);

        dataMap.put("summary", "这次word文档产出的非常棒！继续努力！O(∩_∩)O哈哈~");



        String timeStr = DateUtils.getCurrentTime_yyyyMMddHHmmssSSS();
        String docxTemplateFile = "docTemplates.docx";
        String xmlDocument = "document.xml";
        String xmlDocumentXmlRels = "document.xml.rels";
        String xmlContentTypes = "[Content_Types].xml";
        String xmlHeader = "header1.xml";//可以用来修改页眉的一些信息
        String templatePath = separator + "templates" + separator +"test/";
        String outputFileTempPath = "temp" + separator + timeStr + separator;
        String outputFileName = timeStr + "."+suffix_docx;
//        String outputFileName = timeStr + "."+suffix_doc;


        /*
         * @param dataMap               参数数据
         * @param docxTemplateFile      docx模主板名称
         * @param xmlDocument           docx中document.xml模板文件  用来存在word文档的主要数据信息
         * @param xmlDocumentXmlRels    docx中document.xml.rels 模板文件  用来存在word文档的主要数据配置 包括图片的指向
         * @param xmlContentTypes       docx中 [Content_Types].xml 模板文件 用来配置 docx文档中所插入图片的类型 如 png、jpeg、jpg等
         * @param xmlHeader             docx中 header1.xml 模板文件 用来配置docx文档的页眉文件
         * @param templatePath          模板存放路径 如 /templates/
         * @param outputFileTempPath    所生成的docx文件的临时路径文件夹 如果 temp/20180914051811/
         * @param outputFileName        所生成的docx文件名称  如  xxx.docx 或  xxx.doc
         * */
        try {
            createDocx(dataMap, docxTemplateFile, xmlDocument, xmlDocumentXmlRels, xmlContentTypes,
                    xmlHeader, templatePath, outputFileTempPath, outputFileName);


//            String xmlDocumentXmlRelsComment = FreeMarkUtils.getFreemarkerContent(dataMap,xmlDocumentXmlRels,separator + "templates" );
//            System.out.println(xmlDocumentXmlRelsComment);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 本地文件（图片、excel等）转换成Base64字符串
     *
     * @param imgPath
     */
    public static String convertFileToBase64(String imgPath) {
        byte[] data = null;
        // 读取图片字节数组
        try {
            InputStream in = new FileInputStream(imgPath);
            System.out.println("文件大小（字节）="+in.available());
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组进行Base64编码，得到Base64编码的字符串
        BASE64Encoder encoder = new BASE64Encoder();
        String base64Str = encoder.encode(data);
        return base64Str;
    }
}
